Route Filters CodeIgniter-এ একটি শক্তিশালী বৈশিষ্ট্য, যা নির্দিষ্ট Routes-এ কার্যকলাপ সম্পাদনের আগে বা পরে কোড চালানোর সুযোগ দেয়। এটি সাধারণত Authentication, Authorization, Logging, অথবা অন্য কোনো প্রি-প্রসেসিং বা পোস্ট-প্রসেসিং কাজের জন্য ব্যবহৃত হয়।
Route Filter এর প্রধান কাজ হলো:
Filter তৈরি করতে app/Filters
ডিরেক্টরিতে একটি নতুন ক্লাস তৈরি করুন। উদাহরণস্বরূপ, একটি AuthFilter তৈরি করা যাক:
<?php
namespace App\Filters;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
use CodeIgniter\Filters\FilterInterface;
class AuthFilter implements FilterInterface
{
public function before(RequestInterface $request, $arguments = null)
{
// Authentication চেক
if (! session()->get('isLoggedIn')) {
return redirect()->to('/login');
}
}
public function after(RequestInterface $request, ResponseInterface $response, $arguments = null)
{
// কোনো অ্যাকশনের পরে কাজ করতে চাইলে এখানে কোড যোগ করুন
}
}
Filter নিবন্ধন করতে app/Config/Filters.php
ফাইল এডিট করুন:
<?php
namespace Config;
use CodeIgniter\Config\BaseConfig;
class Filters extends BaseConfig
{
public $aliases = [
'auth' => \App\Filters\AuthFilter::class,
];
public $globals = [
'before' => [],
'after' => [],
];
public $methods = [];
public $filters = [];
}
Route-এ Filter যোগ করতে app/Config/Routes.php
ফাইল এডিট করুন:
$routes->get('dashboard', 'Dashboard::index', ['filter' => 'auth']);
$routes->group('admin', ['filter' => 'auth'], function ($routes) {
$routes->get('dashboard', 'Admin::dashboard');
$routes->get('users', 'Admin::users');
});
Route Restriction সাধারণত Authentication এবং Authorization চেকের জন্য ব্যবহৃত হয়।
Controller এর নির্দিষ্ট মেথডে Filter যুক্ত করুন:
$routes->get('profile', 'User::profile', ['filter' => 'auth']);
Filter ফাইলের before()
মেথডে চেক করুন:
public function before(RequestInterface $request, $arguments = null)
{
if (! session()->get('isLoggedIn')) {
return redirect()->to('/login');
}
}
নির্দিষ্ট রোল চেক করে Route Restriction যুক্ত করা যায়।
Filter:
public function before(RequestInterface $request, $arguments = null)
{
$role = session()->get('role');
if ($role !== 'admin') {
return redirect()->to('/not-authorized');
}
}
Route:
$routes->get('admin', 'Admin::index', ['filter' => 'auth']);
সব Route-এ before বা after ফিল্টার চালানোর জন্য ব্যবহার করা হয়।
app/Config/Filters.php
ফাইল:
public $globals = [
'before' => ['auth'], // সমস্ত রিকোয়েস্টের আগে 'auth' চালাবে
'after' => [],
];
GET, POST, PUT, DELETE ইত্যাদি HTTP মেথডের জন্য আলাদা Filter চালানো যায়।
public $methods = [
'post' => ['csrf'], // POST মেথডের জন্য 'csrf' ফিল্টার চালাবে
];
নির্দিষ্ট Route-এ Filter চালানোর জন্য ব্যবহৃত হয় (উপরের উদাহরণ অনুযায়ী)।
Cross-Site Request Forgery (CSRF) এর সুরক্ষার জন্য একটি Filter:
public $aliases = [
'csrf' => \CodeIgniter\Filters\CSRF::class,
];
Route-এ যোগ করুন:
$routes->post('form-submit', 'FormController::submit', ['filter' => 'csrf']);
নির্দিষ্ট IP থেকে রিকোয়েস্ট সীমাবদ্ধ করার জন্য একটি Filter তৈরি করুন:
public function before(RequestInterface $request, $arguments = null)
{
$allowedIps = ['127.0.0.1', '192.168.0.1'];
$ip = $request->getIPAddress();
if (! in_array($ip, $allowedIps)) {
return redirect()->to('/not-authorized');
}
}
Filter চালানোর সময় কোনো সমস্যা হলে CodeIgniter এর Debug Toolbar ব্যবহার করে লজিক পরীক্ষা করুন।
log_message('debug', 'Filter executed successfully.');
Route Filter এবং Restriction ব্যবহার করে আপনি:
CodeIgniter-এর Filter সিস্টেম আপনাকে সহজে অ্যাপ্লিকেশন নিরাপত্তা এবং রিকোয়েস্ট পরিচালনা করতে সহায়তা করে।
Read more